//package com.yc.springmvc;
//
//import com.yc.springmvc.beans.ParamDo;
//import com.yc.springmvc.controller.IndexContrller;
//import com.yc.springmvc.controller.MyIndexAction;
//import lombok.AllArgsConstructor;
//import lombok.Data;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.ResponseBody;
//import org.springframework.web.bind.annotation.RestController;
//import org.springframework.web.servlet.ModelAndView;
//import sun.plugin2.os.windows.FLASHWINFO;
//
//import javax.servlet.ServletException;
//import javax.servlet.http.HttpServlet;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.lang.reflect.Method;
//import java.util.HashMap;
//import java.util.Map;
//
//public class MyDispatchServlet extends HttpServlet {
//
//    @Override
//    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        Map<String,Object> ioc = new HashMap<>();
//        {
//
//            ioc.put("controller",new IndexContrller());
//            ioc.put("action",new MyIndexAction());
//            ioc.put("do",new ParamDo());
//
//        }
//
//    }
//
//    @Override
//    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.service(req, resp);
//        Handler handler = handlerMapping(req);
//        if (handler!=null){
//            // 404 错误
//            return;
//        }
//        Object res = handlerAdapter(handler,req,resp);
//    }
////获取处理器（控制器+方法）
//    public Handler handlerMapping(HttpServletRequest req){
//        String path = req.getServletPath();
//        //查找控制类对象
//        for (Object controller : ioc.values()){
//            RequestMapping requestMapping =
//                    controller.getClass().getAnnotation(RequestMapping.class);
//            String annoPath = null;
//            if (requestMapping!=null){
//                annoPath = requestMapping.value().length>0 ?
//                        requestMapping.value()[0]:
//                        requestMapping.path()[0];
//
//                if (annoPath.startsWith("/")==false){
//                    annoPath = "/" +annoPath;
//                }
//            }
//            for ( Method method:controller.getClass().getDeclaredMethods()){
//                RequestMapping requestMapping1 =
//                        method.getAnnotation(RequestMapping.class);
//                String methodPath =requestMapping1.value().length>0 ?
//                        requestMapping1.value()[0]:
//                        requestMapping1.path()[0];
//                if (methodPath.startsWith("/")==false){
//
//                    methodPath ="/"+methodPath;
//                }
//                annoPath += methodPath;
//                if (path.equals(annoPath)){
//                    System.out.println("-------- path ="+path);
//                    System.out.println("-------- method =" +method);
//                    return null;
//                }
//            }
//        }
//
//        return null;
//    }
//
//    public Object handlerAdapter(Handler handler ,HttpServletRequest req,HttpServletResponse resp){
//        return null;
//    }
//
//    public boolean returnJson(Handler handler){
//        RestController restcontroller=
//                handler.getController().getClass().getAnnotation(RestController.class);
//        Class<?> returnType = handler.getMethod().getReturnType();
//
//        Controller controller =
//                handler.getController().getClass().getAnnotation(Controller.class);
//        ResponseBody responseBody = handler.getMethod().getAnnotation(ResponseBody.class);
//
//        return restcontroller!=null && ! returnType.isAssignableFrom(ModelAndView.class)
//                || controller !=null && responseBody !=null;
//    }
//
//    public boolean returnHtml(Handler handler){
//        return false;
//    }
//    @Data
//    @AllArgsConstructor
//    class Handler{
//        Object controller;
//        Method method;
//    }
//}
